//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "uSTaux.h"
#include "cdevise.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
AnsiString __fastcall DeviseSaisirTauxChange( int nXScreen, int nYScreen, const CDevise &eDevise)
{
  AnsiString      strTaux;
  TfrmSaisieTaux *frmSaisieTaux = new TfrmSaisieTaux( NULL);

  frmSaisieTaux->Top  = nYScreen;
  frmSaisieTaux->Left = nXScreen;

  frmSaisieTaux->pnlDevise->Caption =        eDevise.CodeISO;
  frmSaisieTaux->lblDevise->Caption = "1 " + eDevise.CodeISO;

  if( eDevise.Taux>0)
    frmSaisieTaux->edsDEV_EUR->Text = eDevise.Taux;

  frmSaisieTaux->ShowModal();

  if( !frmSaisieTaux->edcDEV_EUR->Text.IsEmpty())
    strTaux = frmSaisieTaux->edcDEV_EUR->Text;

  delete frmSaisieTaux;
  return strTaux;
}
//---------------------------------------------------------------------------
AnsiString __fastcall SaisieTauxChange( CEditDevise *edDevise)
{
  POINT point, screenpoint;
  AnsiString strTaux;

  TForm          *pForm         = ( TForm*)::GetParentForm( edDevise); ASSERT( pForm);
  TfrmSaisieTaux *frmSaisieTaux = new TfrmSaisieTaux( /*Applicationtoto*/0);

  point.x = point.y = 0;
  screenpoint         = edDevise->ClientToScreen( point);
  frmSaisieTaux->Top  = screenpoint.y + edDevise->Height - 2;
  frmSaisieTaux->Left = (( pForm->Width - frmSaisieTaux->Width) / 2) + pForm->Left;

  frmSaisieTaux->pnlDevise->Caption =        edDevise->CodeISO;
  frmSaisieTaux->lblDevise->Caption = "1 " + edDevise->CodeISO;

  if ( edDevise->TauxChange>0) frmSaisieTaux->edsDEV_EUR->Text = edDevise->TauxChange;

  frmSaisieTaux->ShowModal();

  if ( !frmSaisieTaux->edcDEV_EUR->Text.IsEmpty()) strTaux = frmSaisieTaux->edcDEV_EUR->Text;

  delete frmSaisieTaux;
  return strTaux;
}
//---------------------------------------------------------------------------
__fastcall TfrmSaisieTaux::TfrmSaisieTaux(TComponent* Owner)
    : TForm(Owner)
{
  edcEUR_FRF->Text = DeviseFranc.Taux;
  edcFRF_EUR->Text = ( double)1 / DeviseFranc.Taux;

  if( _CodePays!=CP_FRANCE) {
    pnlFRF->Visible = false;
    Panel9->Visible = false;
    Panel8->Visible = false;
    Panel2->Visible = false;
    Panel3->Visible = false;
    Width  -= pnlFRF->Width;
    Height -= ( Panel2->Height / 3);
    pnlHEUR->Caption = DeviseDefaut->CodeISO;
     lblEUR->Caption = "1 " + DeviseDefaut->CodeISO;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsDEV_EURChange(TObject *Sender)
{
  double dTaux;

  if ( ActiveControl!=edsDEV_FRF) edsDEV_FRF->Text = EmptyStr;
  if ( ActiveControl!=edsEUR_DEV) edsEUR_DEV->Text = EmptyStr;
  if ( ActiveControl!=edsFRF_DEV) edsFRF_DEV->Text = EmptyStr;

  try {
    dTaux            = edsDEV_EUR->Text.ToDouble();
    edcDEV_EUR->Text = edsDEV_EUR->Text;
    edcEUR_DEV->Text = ( double)1 / dTaux;
    edcDEV_FRF->Text = dTaux * DeviseFranc.Taux;
    edcFRF_DEV->Text = ( double)1 / ( dTaux * DeviseFranc.Taux);
  } catch( ...) {
    edcDEV_EUR->Text = EmptyStr;
    edcEUR_DEV->Text = EmptyStr;
    edcDEV_FRF->Text = EmptyStr;
    edcFRF_DEV->Text = EmptyStr;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsEUR_DEVChange(TObject *Sender)
{
  double dTaux;

  if ( ActiveControl!=edsDEV_EUR) edsDEV_EUR->Text = EmptyStr;
  if ( ActiveControl!=edsDEV_FRF) edsDEV_FRF->Text = EmptyStr;
  if ( ActiveControl!=edsFRF_DEV) edsFRF_DEV->Text = EmptyStr;

  try {
    dTaux            = edsEUR_DEV->Text.ToDouble();
    edcEUR_DEV->Text = edsEUR_DEV->Text;
    edcFRF_DEV->Text = ( double)1 / ( DeviseFranc.Taux / dTaux);
    edcDEV_EUR->Text = ( double)1 / dTaux;
    edcDEV_FRF->Text = DeviseFranc.Taux / dTaux;
  } catch( ...) {
    edcEUR_DEV->Text = EmptyStr;
    edcFRF_DEV->Text = EmptyStr;
    edcDEV_EUR->Text = EmptyStr;
    edcDEV_FRF->Text = EmptyStr;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsDEV_FRFChange(TObject *Sender)
{
  double dTaux;

  if ( ActiveControl!=edsDEV_EUR) edsDEV_EUR->Text = EmptyStr;
  if ( ActiveControl!=edsEUR_DEV) edsEUR_DEV->Text = EmptyStr;
  if ( ActiveControl!=edsFRF_DEV) edsFRF_DEV->Text = EmptyStr;

  try {
    dTaux            = edsDEV_FRF->Text.ToDouble();
    edcDEV_FRF->Text = edsDEV_FRF->Text;
    edcDEV_EUR->Text = dTaux / DeviseFranc.Taux;
    edcEUR_DEV->Text = ( double)1 / ( dTaux / DeviseFranc.Taux);
    edcFRF_DEV->Text = ( double)1 / dTaux;
  } catch( ...) {
    edcDEV_FRF->Text = EmptyStr;
    edcDEV_EUR->Text = EmptyStr;
    edcEUR_DEV->Text = EmptyStr;
    edcFRF_DEV->Text = EmptyStr;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsFRF_DEVChange(TObject *Sender)
{
  double dTaux;

  if ( ActiveControl!=edsDEV_EUR) edsDEV_EUR->Text = EmptyStr;
  if ( ActiveControl!=edsDEV_FRF) edsDEV_FRF->Text = EmptyStr;
  if ( ActiveControl!=edsEUR_DEV) edsEUR_DEV->Text = EmptyStr;

  try {
    dTaux            = edsFRF_DEV->Text.ToDouble();
    edcFRF_DEV->Text = edsFRF_DEV->Text;
    edcDEV_FRF->Text = ( double)1 / dTaux;
    edcDEV_EUR->Text = (( double)1 / dTaux) / DeviseFranc.Taux;
    edcEUR_DEV->Text = dTaux * DeviseFranc.Taux;
  } catch( ...) {
    edcFRF_DEV->Text = EmptyStr;
    edcDEV_FRF->Text = EmptyStr;
    edcDEV_EUR->Text = EmptyStr;
    edcEUR_DEV->Text = EmptyStr;
  }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsDEV_FRFKeyPress(TObject *Sender, char &Key)
{
  TEdit *pEdit = dynamic_cast< TEdit*>( Sender); ASSERT( pEdit);

  if( Key=='-') Key = '\0';
  if( Key=='.') Key = DecimalSeparator;
  if(( Key==DecimalSeparator) && ( pEdit->Text.Pos( DecimalSeparator)!=0)) Key = '\0';
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::Edit1Enter(TObject *Sender)
{
  edsDEV_EUR->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsEUR_DEVKeyDown(TObject *Sender,
      WORD &Key, TShiftState Shift)
{
  TEdit *edTaux = dynamic_cast<TEdit*>( Sender); ASSERT( edTaux);

  if ( Key==VK_RETURN) {
    Key = 0;
    if ( edTaux->Text.IsEmpty()) ::SendMessage( Handle, WM_NEXTDLGCTL, 0, FALSE);
                            else Close();
  }

  if ( Key==VK_ESCAPE) { Key=0; Close(); }
}
//---------------------------------------------------------------------------
void __fastcall TfrmSaisieTaux::edsDEV_EURExit(TObject *Sender)
{
  ASSERT(( Sender==edsEUR_DEV) || ( Sender==edsFRF_DEV) ||
         ( Sender==edsDEV_EUR) || ( Sender==edsDEV_FRF));
  ASSERT ( dynamic_cast<TEdit*>( Sender));

  dynamic_cast<TEdit*>( Sender)->SelStart = 0;
}
//---------------------------------------------------------------------------

